package com.timeriver.feature_project

import org.apache.spark.ml.feature.Binarizer
import org.apache.spark.sql.{DataFrame, SparkSession}

/**
  * Binarizer：是将数字特征阈值化为二进制（0/1）特征的过程：
  *   大于阈值的特征值被二值化为1.0；
  *   等于或小于阈值的值被二值化为0.0。
  *   inputCol支持Vector和Double两种类型。
  */
object BinarizerDemo {
  def main(args: Array[String]): Unit = {
    val session: SparkSession = SparkSession.builder()
      .master("local[6]")
      .appName("连续数据特征二值化")
      .getOrCreate()

    val tuples: Array[(Int, Double)] = Array((0, 0.2), (1, 0.5), (2, 0.6), (3, 0.4))
    val data: DataFrame = session.createDataFrame(tuples).toDF("id", "value")

    val binarizer: Binarizer = new Binarizer()
      .setInputCol("value")
      .setOutputCol("binarizerVal")
      .setThreshold(0.5)

    val res: DataFrame = binarizer.transform(data)
    res.show(false)
  }
}
